/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.folha.controller;

import br.com.folha.dao.GenericoDao;
import br.com.folha.dao.TipologiaDao;
import br.com.folha.entity.Tipologia;
import java.io.Serializable;
import java.util.Date;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

/**
 *
 * @author marceloml
 */
@ManagedBean(name="TipologiaController")
@ViewScoped
public class TipologiaController implements Serializable{
    
    private static final long serialVersionUID = 1L;
    
    private Tipologia tipologia;
    private Tipologia tipologiaSelecionada;
    private transient DataModel lista;
    private GenericoDao tipologiaDao = new GenericoDao();    

    private String acao;
    private Long resultado;
    private Date data = new Date();
    private boolean retorno;

    public TipologiaController(){
        
        tipologia = new Tipologia();
        
    }

    public void preparaInclusao(){
               
        FacesMessage msg = null;
        FacesContext context = FacesContext.getCurrentInstance();
        
        if(tipologia.getNome().equals("")){
                        
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "O nível da tipologia deve ser informado", "");
            context.getCurrentInstance().addMessage(null, msg);
            
        }if(tipologia.getNm_situacao().equals("")){
                        
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "A situação deve ser informada", "");
            context.getCurrentInstance().addMessage(null, msg);            
            
        }else{
            
            if(!acao.equals("edicao")){
            
                    TipologiaDao consulta = new TipologiaDao();
                    resultado = consulta.consultaTipologia(tipologia.getNome());

                    if(resultado == 0){
                        salvaOperacao();
                        resetTipologia();
                    }else{
                        msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Já existe uma tipologia com esse nome", "");
                        context.getCurrentInstance().addMessage(null, msg);
                    }
            
            }else{
                
                editaTipologia();
                acao = "";
            }
            
        }        
        
    }
    
    public void salvaOperacao(){
        
        FacesMessage msg = null;
        FacesContext context = FacesContext.getCurrentInstance();   
        
        this.tipologia.setDt_cadastro(data);
        
        LoginController usuarioLogado = new LoginController();
                
        this.tipologia.setUsuario_cadastro(usuarioLogado.Usuario.getId());
        
        this.tipologia.setValor(tipologia.getValor());
        
        retorno = tipologiaDao.salvar(this.tipologia);
        
        lista = new ListDataModel(tipologiaDao.listar(tipologia));
        
        if(retorno){
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Tipologia cadastrada com sucesso!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }else{
            msg = new FacesMessage(FacesMessage.SEVERITY_FATAL, "Falha ao salvar tipologia!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);            
        }
        
    }
    
    public void editaTipologia(){
        
        FacesMessage msg = null;
        
        tipologia.setDt_atualizacao(data);
        
        LoginController usuarioLogado = new LoginController();
        
        tipologia.setUsuario_atualizacao(usuarioLogado.Usuario.getId());
        
        retorno = tipologiaDao.atualizar(tipologia); 
        
        resetTipologia();
        
        lista = new ListDataModel(tipologiaDao.listar(tipologia));
        
        if(retorno){           
           
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Tipologia atualizada com sucesso!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);
            
        }          
        
    }    
    
    public void deleteTipologia(){
        
        FacesMessage msg = null;
        
        if(this.tipologiaSelecionada == null){
            
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Selecione a tipologia a ser deletada!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);             
            
        }else{
        
            retorno = tipologiaDao.excluir(this.tipologiaSelecionada);
            
            if(retorno){
                
                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Tipologia excluída corretamente!", "");
                FacesContext.getCurrentInstance().addMessage(null, msg);                  
            
                resetTipologia();
                
            }else{
                
                msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Falha ao deletar tipologia!", "");
                FacesContext.getCurrentInstance().addMessage(null, msg);                  
                
            }
            
        }
        
    }
    
    public Tipologia preparaEdicao(){
        
        FacesMessage msg = null;
        
        if(this.tipologiaSelecionada == null){
            
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Selecione a tipologia a ser editada!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);            
            
        }else{
            
            System.out.println("valor :"+this.tipologiaSelecionada.getValor());
        
            tipologia = this.tipologiaSelecionada;                        
            
            acao = "edicao";
        
        }
        
      return tipologia;
    }    
    
    public void resetTipologia(){
        tipologia = new Tipologia();
    }    
    
    public Tipologia getTipologia() {
        return tipologia;
    }

    public void setTipologia(Tipologia tipologia) {
        this.tipologia = tipologia;
    }

    public Tipologia getTipologiaSelecionada() {
        return tipologiaSelecionada;
    }

    public void setTipologiaSelecionada(Tipologia tipologiaSelecionada) {
        this.tipologiaSelecionada = tipologiaSelecionada;
    }

    public DataModel getLista() {
        if(lista == null || lista.getRowCount() == 0){
            lista = new ListDataModel(tipologiaDao.listar(getTipologia()));
        }
        return lista;
    }

    public GenericoDao getTipologiaDao() {
        return tipologiaDao;
    }

    public void setTipologiaDao(GenericoDao tipologiaDao) {
        this.tipologiaDao = tipologiaDao;
    }
    
}
